package com.hollycrm.hollysqm.handle.service;

import java.util.Date;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.hollycrm.hollysqm.entities.TblQmPlan;
import com.hollycrm.hollysqm.entities.TblQmPlanLog;
import com.hollycrm.hollysqm.entities.TblQmPlanParam;
import com.hollycrm.hollysqm.handle.dao.QmPlanDao;
import com.hollycrm.hollysqm.handle.dao.QmPlanExtractDao;
import com.hollycrm.hollysqm.handle.dao.QmPlanLogDao;
import com.hollycrm.hollysqm.handle.dao.QmPlanParamDao;
import com.hollycrm.hollysqm.util.CalendarUtil;
import com.hollycrm.hollysqm.util.Constant;
import com.hollycrm.hollysqm.util.UuidUtil;

/**
 * 获取质检计划相关业务数据
 * @author jianglong
 * @date 2017年4月1日 上午11:17:21
 */
@Service
public class PlanService {
	@Autowired
	private QmPlanDao qmPlanDao;
	@Autowired
	private QmPlanParamDao qmPlanParamDao;
	@Autowired
	private QmPlanLogDao qmPlanLogDao;
	@Autowired
	private QmPlanExtractDao qmPlanExtractDao;
	
	
	/**
	 * 获取质检计划表对象
	 * @param planId
	 * @return
	 */
	public TblQmPlan getQmPlan(String planId){
		return qmPlanDao.findOne(planId);
	}
	
	/**
	 * 获取质检计划参数表对象
	 * @param planId
	 * @return
	 */
	public TblQmPlanParam getQmPlanParam(String planId){
		return qmPlanParamDao.findOne(planId);
	}
	
	/**
	 * 获取质检计划参数表对象
	 * @param planParam
	 * @return
	 */
	public void updateQmPlanParam(TblQmPlanParam planParam){
		qmPlanParamDao.save(planParam);
	}
	
	/**
	 * 获取质检计划日志对象
	 * @param planId
	 * @return
	 */
	public TblQmPlanLog getQmPlanLog(String planId){
		return qmPlanLogDao.getQmPlanLog(planId);
	}
	
	/**
	 * 保存日志信息
	 * @param planId
	 * @param createCode
	 */
	public TblQmPlanLog saveQmPlanLog(String planId,String createCode){
		TblQmPlanLog planLog = new TblQmPlanLog();
		planLog.setPlanLogId(UuidUtil.getUuid());
		planLog.setPlanId(planId);
		planLog.setCreateCode(createCode);
		planLog.setCreateTime(DateFormatUtils.format(new Date(), Constant.YYYY_MM_DD_HH_MM_SS));
		planLog.setStartTime(planLog.getCreateTime());		
		planLog.setPaperCount(0);				
		qmPlanLogDao.save(planLog);
		return planLog ;
	}
	
	/**
	 * 更新日志信息
	 * @param planLog
	 */
	public void updateQmPlanLog(TblQmPlanLog planLog){
		planLog.setEndTime(DateFormatUtils.format(new Date(), Constant.YYYY_MM_DD_HH_MM_SS));
		qmPlanLogDao.save(planLog);
	}
	
	/**
	 * 删除质检计划临时表数据
	 * @param planId
	 */
	public void deletePlan(String planId){		
		qmPlanExtractDao.deletePlanExtract(planId);
	}
	
	/**
	 * 重新下一个周期的抽取时间段
	 * @param planParam
	 * @param paramMap
	 * @throws Exception
	 */
	public void updateParamJosn(TblQmPlanParam planParam, Map<String, Object> paramMap) throws Exception {
		//日期规则：1固定时间，2固定天数（以当前计划执行时间，前移天数范围内的），3固定周期（每次执行计划，按该时间周期段顺延执行到下个周期）
		String dateRule =(String) paramMap.get("dateRule");
		if (StringUtils.equals("3", dateRule)){
			String startTime =(String) paramMap.get("startTime");
			String endTime =(String) paramMap.get("endTime");
			//Map转josn				
			String [] times = CalendarUtil.monthTimeMove(startTime, endTime, "yyyyMMdd");
			paramMap.put("startTime", times[0]);
			paramMap.put("endTime", times[1]);
			ObjectMapper objMapper = new ObjectMapper();
			planParam.setParamJosn(objMapper.writeValueAsString(paramMap));
			this.updateQmPlanParam(planParam);
		}
	}
}
